﻿<!DOCTYPE html>
<html>

	<head>
		<title></title>
		<meta charset="UTF-8" />
		<meta name="viewport" content="initial-scale=1.0, user-scalable=no" />
		<script type="text/javascript" src="http://api.map.baidu.com/api?v=2.0&ak=G3KsOmqT7ruGRgxmU9dtpb4r8kjSlMiy"></script>
		<style type="text/css">
			html {
				height: 100%
			}
			
			body {
				height: 100%;
				margin: 0px;
				padding: 0px
			}
			
			#container {
				height: 100%
			}
		</style>
	</head>

	<body>
		<div id="container"></div>
		<script type="text/javascript">
			/*
			 * 创建地图实例
			 * 注意：
			 * 1.在调用此构造函数时应确保容器元素已经添加到地图上。
			 * 2.命名空间 API使用BMap作为命名空间，所有类均在该命名空间之下，比如：BMap.Map、BMap.Control、BMap.Overlay。
			 */
			var map = new BMap.Map("container");
			/*
			 * 设置中心点坐标
			 * 这里我们使用BMap命名空间下的Point类来创建一个坐标点。Point类描述了一个地理坐标点，其中116.404表示经度，39.915表示纬度。（为天安门坐标）
			 * 请注意：在使用百度地图JavaScript API服务时，需使用百度BD09坐标，如使用其他坐标（ WGS84、GCJ02）进行展示，需先将其他坐标转换为BD09，详细说明请参考坐标转换说明，请勿使用非官方的转换方法！！！
			 * 
			 * 目前国内主要有以下三种坐标系：
			 * WGS84：为一种大地坐标系，也是目前广泛使用的GPS全球卫星定位系统使用的坐标系。
			 * GCJ02：又称火星坐标系，是由中国国家测绘局制订的地理信息系统的坐标系统。由WGS84坐标系经加密后的坐标系。
			 * BD09：为百度坐标系，在GCJ02坐标系基础上再次加密。其中bd09ll表示百度经纬度坐标，bd09mc表示百度墨卡托米制坐标。
			 * 非中国地区地图，服务坐标统一使用WGS84坐标。
			 */
			var point = new BMap.Point(116.404, 39.915);
			/**
			 * 地图初始化，同时设置地图展示级别
			 * 在创建地图实例后，我们需要对其进行初始化，BMap.Map.centerAndZoom()方法要求设置中心点坐标和地图级别。 地图必须经过初始化才可以执行其他操作。
			 */
			map.centerAndZoom(point, 15);
			/**
			 * 等待两秒钟后，地图它会移动到新中心点。panTo()方法将让地图平滑移动至新中心点，如果移动距离超过了当前地图区域大小，则地图会直跳到该点。
			 */
			//			window.setTimeout(function() {
			//				map.panTo(new BMap.Point(116.409, 39.918));
			//			}, 2000);
			/**
			 * 在地图中使用鼠标滚轮控制缩放
			 */
			map.enableScrollWheelZoom(true);

			/**
			 * 向地图添加一个平移缩放控件
			 * 
			 * 平移缩放控件的类型	说明
			 * BMAP_NAVIGATION_CONTROL_LARGE	表示显示完整的平移缩放控件
			 * BMAP_NAVIGATION_CONTROL_SMALL	表示显示小型的平移缩放控件
			 * BMAP_NAVIGATION_CONTROL_PAN	            表示只显示控件的平移部分功能
			 * BMAP_NAVIGATION_CONTROL_ZOOM	            表示只显示控件的缩放部分功能
			 */
			//map.addControl(new BMap.NavigationControl());
			var opts = {
				type: BMAP_NAVIGATION_CONTROL_SMALL
			}
			map.addControl(new BMap.NavigationControl(opts));

			/**
			 * 向地图添加一个比例尺控件
			 */
			//			map.addControl(new BMap.ScaleControl());

			/**
			 * 初始化控件时，可提供一个可选参数，其中的anchor和offset属性共同控制控件在地图上的位置。 
			 * anchor表示控件的停靠位置，即控件停靠在地图的哪个角。当地图尺寸发生变化时，控件会根据停靠位置的不同来调整自己的位置。
			 * anchor值	位置说明
			 * BMAP_ANCHOR_TOP_LEFT	            表示控件定位于地图的左上角
			 * BMAP_ANCHOR_TOP_RIGHT	表示控件定位于地图的右上角
			 * BMAP_ANCHOR_BOTTOM_LEFT	表示控件定位于地图的左下角
			 * BMAP_ANCHOR_BOTTOM_RIGHT	表示控件定位于地图的右下角
			 *
			 * 除了指定停靠位置外，还可以通过偏移量来指示控件距离地图边界有多少像素。如果两个控件的停靠位置相同，那么控件可能会重叠在一起，这时就可以通过偏移值使二者分开显示。
			 * 如下示例为：将比例尺放置在地图的左下角，由于API默认会有版权信息，因此需要添加一些偏移值以防止控件重叠。
			 */
			var opts = {
				offset: new BMap.Size(150, 50)
			}
			map.addControl(new BMap.ScaleControl(opts));

			/**
			 * 向地图添加一个缩略图控件,默认位于地图右下方，是一个可折叠的缩略地图
			 */
			map.addControl(new BMap.OverviewMapControl());

			/**
			 * 地图类型,默认位于地图右上方
			 */
			map.addControl(new BMap.MapTypeControl());
			map.setCurrentCity("北京"); // 仅当设置城市信息时，MapTypeControl的切换功能才能可用

			//begin ------------ 百度地图API允许您通过继承Control来创建自定义地图控件。
			/**
			 * 定义一个自定义控件的构造函数并继承Control
			 * 您需要定义自定义控件的构造函数，并在构造函数中提供defaultAnchor和defaultOffset两个属性，以便API正确定位控件位置，接着让其继承于Control。
			 * 
			 * 在下面的示例中我们定义一个名为ZoomControl的控件，每一次点击将地图放大两个级别。
			 * 它具有文本标识，而不是平移缩放控件中使用的图形图标。
			 */
			// 定义一个控件类，即function    
			function ZoomControl() {
				// 设置默认停靠位置和偏移量  
				this.defaultAnchor = BMAP_ANCHOR_TOP_LEFT;
				this.defaultOffset = new BMap.Size(100, 100);
			}
			// 通过JavaScript的prototype属性继承于BMap.Control   
			ZoomControl.prototype = new BMap.Control();

			/**
			 * 初始化自定义控件
			 * 设置自定义控件构造函数的prototype属性为Control的实例，以便继承控件基类。
			 * 
			 * 当调用map.addControl()方法添加自定义控件时，API会调用该对象的initialize()方法用来初始化控件，您需要实现此方法并在其中创建控件所需的DOM元素，并添加DOM事件。
			 * 所有自定义控件中的DOM元素最终都应该添加到地图容器（即地图所在的DOM元素）中去，地图容器可以通过map.getContainer()方法获得。
			 * 最后initialize()方法需要返回控件容器的DOM元素。
			 */
			// 自定义控件必须实现initialize方法，并且将控件的DOM元素返回   
			// 在本方法中创建个div元素作为控件的容器，并将其添加到地图容器中   
			ZoomControl.prototype.initialize = function(map) {
				// 创建一个DOM元素   
				var div = document.createElement("div");
				// 添加文字说明    
				div.appendChild(document.createTextNode("放大2级"));
				// 设置样式    
				div.style.cursor = "pointer";
				div.style.border = "1px solid gray";
				div.style.backgroundColor = "white";
				// 绑定事件，点击一次放大两级    
				div.onclick = function(e) {
					map.zoomTo(map.getZoom() + 2);
				}
				// 添加DOM元素到地图中   
				map.getContainer().appendChild(div);
				// 将DOM元素返回  
				return div;
			}

			/**
			 * 添加自定义控件
			 * 添加自定义控件与添加其他控件方法一致，调用map.addControl()方法即可。
			 */
			// 创建控件实例    
			var myZoomCtrl = new ZoomControl();
			// 添加到地图当中    
			map.addControl(myZoomCtrl);
			//end -------------- 百度地图API允许您通过继承Control来创建自定义地图控件。

			/**
			 * 个性化地图
			 * 
			 * 通过百度地图提供的样式模板，选择地图，然后通过JavaScriptAPI的setMapStyle方法调用生效
			 * 通过个性地图编辑工具，自行编辑地图展示样式，生成地图样式json，然后通过JavaScriptAPI的方法调用生效
			 * 个性化编辑方式是指开发者可以借助个性地图编辑工具，通过改变地图元素的颜色、亮度、饱和度、文本标注填充色、文本标注等生成样式配置json，然后通过调用JavaScriptAPI方法使配置生效。
			 */
			var mapStyle = {
				//				style: "mapbox"
				style: "midnight"
			}
			map.setMapStyle(mapStyle);
		</script>
	</body>

</html>